/* * Author: Chris Seguin * * This software has been developed under the copyleft * rules of the GNU General Public License. Please * consult the GNU General Public License for more * details about use and distribution of this software. */ package org.acm.seguin.ide.command; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.border.EmptyBorder; import org.acm.seguin.ide.common.PackageSelectorArea; import org.acm.seguin.io.Saveable; import org.acm.seguin.summary.PackageSummary; import org.acm.seguin.summary.SummaryTraversal; import org.acm.seguin.uml.UMLPackage; import org.acm.seguin.uml.loader.Reloader; import org.acm.seguin.uml.loader.ReloaderSingleton; /** * Creates a panel for the selection of packages to view. * *@author Chris Seguin *@created August 10, 1999 */ public class PackageSelectorPanel extends PackageSelectorArea implements ActionListener, Saveable, Reloader { /** * The root directory */ protected String rootDir = null; // Instance Variables private HashMap viewList; private ButtonPanel buttons; // Class Variables private static PackageSelectorPanel mainPanel; /** * Constructor for the PackageSelectorPanel object * *@param root The root directory */ protected PackageSelectorPanel(String root) { super(); // Setup the instance variables setRootDirectory(root); ReloaderSingleton.register(this); ReloaderSingleton.reload(); buttons = new ButtonPanel(this); createFrame(); } /** * Handle the button press events * *@param evt the event */ public void actionPerformed(ActionEvent evt) { String command = evt.getActionCommand(); if (command.equals("Show")) { Object[] selection = listbox.getSelectedValues(); for (int ndx = 0; ndx < selection.length; ndx++) { PackageSummary next = (PackageSummary) selection[ndx]; showSummary(next); } } else if (command.equals("Hide")) { Object[] selection = listbox.getSelectedValues(); for (int ndx = 0; ndx < selection.length; ndx++) { PackageSummary next = (PackageSummary) selection[ndx]; hideSummary(next); } } else if (command.equals("Reload")) { ReloaderSingleton.reload(); } } /** * Reloads the package information */ public void reload() { loadPackages(); } /** * Saves the diagrams * *@exception IOException Description of Exception */ public void save() throws IOException { Iterator iter = viewList.keySet().iterator(); while (iter.hasNext()) { PackageSummary packageSummary = (PackageSummary) iter.next(); UMLPackage view = getPackage(packageSummary).getUmlPackage(); view.save(); } } /** * Loads the packages into the listbox and refreshes the UML diagrams */ public void loadPackages() { loadSummaries(); super.loadPackages(); // Reloads the screens UMLPackage view = null; PackageSummary packageSummary = null; if (viewList == null) { viewList = new HashMap(); return; } Iterator iter = viewList.keySet().iterator(); while (iter.hasNext()) { packageSummary = (PackageSummary) iter.next(); view = getPackage(packageSummary).getUmlPackage(); view.reload(); } } /** * Load the summaries */ public void loadSummaries() { // Load the summaries (new SummaryTraversal(rootDir)).go(); } /** * Set the root directory * *@param root the new root directory */ protected void setRootDirectory(String root) { if (root == null) { rootDir = System.getProperty("user.dir"); } else { rootDir = root; } } /** * Get the package from the central store * *@param summary The package summary that we are looking for *@return The UML package */ protected UMLFrame getPackage(PackageSummary summary) { return (UMLFrame) viewList.get(summary); } /** * Add package to central store * *@param summary the summary we are adding *@param view the associated view */ protected void addPackage(PackageSummary summary, UMLFrame view) { viewList.put(summary, view); } /** * Shows the summary * *@param packageSummary the summary to show */ private void showSummary(PackageSummary packageSummary) { UMLFrame view = getPackage(packageSummary); if ((view == null) && (packageSummary.getFileSummaries() != null)) { createNewView(packageSummary); } else if (packageSummary.getFileSummaries() == null) { // Nothing to view } else { view.getUmlPackage().reload(); view.setVisible(true); } } /** * Hide the summary * *@param packageSummary the summary to hide */ private void hideSummary(PackageSummary packageSummary) { UMLFrame view = getPackage(packageSummary); view.setVisible(false); } /** * Creates a new view * *@param packageSummary The packages summary */ private void createNewView(PackageSummary packageSummary) { UMLFrame frame = new UMLFrame(packageSummary); addPackage(packageSummary, frame); } /** * Creates the frame */ private void createFrame() { JFrame frame = new JFrame("Package Selector"); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); JScrollPane scrollPane = getScrollPane(); scrollPane.setBorder(new EmptyBorder(10, 10, 10, 10)); panel.add(scrollPane, BorderLayout.CENTER); panel.add(buttons, BorderLayout.EAST); frame.getContentPane().add(panel); CommandLineMenu clm = new CommandLineMenu(); frame.setJMenuBar(clm.getMenuBar(this)); frame.addWindowListener(new ExitMenuSelection()); frame.setSize(350, 350); frame.setVisible(true); } /** * Get the main panel * *@param directory Description of Parameter *@return The MainPanel value */ public static PackageSelectorPanel getMainPanel(String directory) { if (mainPanel == null) { if (directory == null) { return null; } mainPanel = new PackageSelectorPanel(directory); } mainPanel.setVisible(true); return mainPanel; } /** * Main program for testing purposes * *@param args The command line arguments */ public static void main(String[] args) { if (args.length != 1) { System.out.println("Syntax: java org.acm.seguin.uml.PackageSelectorPanel <dir>"); return; } PackageSelectorPanel panel = PackageSelectorPanel.getMainPanel(args[0]); ReloaderSingleton.register(panel); } /** * Description of the Class * *@author Chris Seguin */ private class ButtonPanel extends JPanel { private ActionListener listener; /** * Constructor for the ButtonPanel object * *@param listener Description of Parameter */ public ButtonPanel(ActionListener listener) { this.listener = listener; init(); this.setSize(getPreferredSize()); } /** * Gets the PreferredSize attribute of the ButtonPanel object * *@return The PreferredSize value */ public Dimension getPreferredSize() { return new Dimension(110, 170); } /** * Gets the MaximumSize attribute of the ButtonPanel object * *@return The MaximumSize value */ public Dimension getMaximumSize() { return getPreferredSize(); } /** * Description of the Method */ private void init() { this.setLayout(null); // Add the buttons JButton showButton = new JButton("Show"); showButton.setBounds(0, 10, 100, 25); add(showButton); showButton.addActionListener(listener); JButton hideButton = new JButton("Hide"); hideButton.setBounds(0, 50, 100, 25); add(hideButton); hideButton.addActionListener(listener); JButton reloadButton = new JButton("Reload"); reloadButton.setBounds(0, 90, 100, 25); add(reloadButton); reloadButton.addActionListener(listener); JButton reloadAllButton = new JButton("Reload All"); reloadAllButton.setBounds(0, 130, 100, 25); reloadAllButton.setEnabled(false); add(reloadAllButton); } } }